#include <stdio.h>
#include <stdlib.h>
#include <Queue.h>

// 初始化队列
void initQueue(Queue* q) {
    q->front = q->rear = NULL;
}

// 检查队列是否为空
int isEmpty(Queue* q) {
    return q->front == NULL;
}

// 创建新节点并入队
void enqueue(Queue* q, int idx, float depth) {
    Queue_Node* newQueue_Node = (Queue_Node*)malloc(sizeof(Queue_Node));
    if (newQueue_Node == NULL) {
        printf("Memory allocation failed.\n");
        exit(EXIT_FAILURE);
    }
    newQueue_Node->idx = idx;
    newQueue_Node->depth = depth;
    newQueue_Node->next = NULL;
    if (isEmpty(q)) {
        q->front = q->rear = newQueue_Node;
    } else {
        q->rear->next = newQueue_Node;
        q->rear = newQueue_Node;
    }
}

// 出队操作
int dequeue(Queue* q) {
    if (isEmpty(q)) {
        printf("Queue is empty.\n");
        exit(EXIT_FAILURE);
    }

    Queue_Node* temp = q->front;
    int value = temp->idx;
    q->front = q->front->next;

    if (q->front == NULL) {
        q->rear = NULL;
    }

    free(temp);
    return value;
}

// 主函数，用于演示队列的使用
// int main() {
//     Queue q;
//     initQueue(&q);

//     enqueue(&q, 10);
//     enqueue(&q, 20);
//     enqueue(&q, 30);

//     printf("Dequeue item: %d\n", dequeue(&q));
//     printf("Dequeue item: %d\n", dequeue(&q));

//     if (isEmpty(&q)) {
//         printf("Queue is empty.\n");
//     } else {
//         printf("Queue is not empty.\n");
//     }

//     return 0;
// }